/*
    Copyright (c) Guangzhou Data Control Network Technology Co., Ltd. All rights reserved.
    Licensed under the MIT License.
    contact:dcdev_founder@foxmail.com
*/
(function (window, undefined) {
    side_bar_class =// 相关功能函数
    {
        // 初始化
        init: function (data, cb) {
            var that;
            // 赋值that，与函数内的this作区分
            that = this;
            // 保存传入的配置数据
            that._dc_side_bar_data_ = data;
            // 保存全局变量对象
            window[`_dc_side_bar_object_`] = that;
            // 根据全局变量数据
            window[`_dc_side_bar_data_`] = data;
            // 菜单展开速度
            data.interval = data.interval ? data.interval : 1;
            // 标题栏及菜单的容器
            data.container = data.container ? data.container : "body";
            // 默认侧边菜单展开宽度
            if (!data.extent_rate) {
                data.extent_rate = 100;
            }
            // 默认侧边菜单背景样式
            data.side_bar_config.side_bar_container_style = data.side_bar_config.side_bar_container_style ? data
                .side_bar_config.side_bar_container_style :
                `background-color:gray;boarder-style:solid;boarder-width:1px;boarder-color:gray;`;
            // 添加用于呼出菜单的按钮
            if (data.title_bar_config && data.title_bar_config.html) {
                data.title_bar_config.html = data.title_bar_config.html.replace(`#{_dc_menu_button_}`,
                    `<div id="_dc_menu_button_">${data.title_bar_config.off_config.html ? data.title_bar_config.off_config.html : ""}</div>`)
            }
            // 添加侧边栏容器
            $(`#${data.container}`).append(
                `<div class="_dcdev_preset_" id="_dc_side_bar_container_" style="z-index:9999999;display:none;position:absolute;${data.side_bar_config.side_bar_container_style}">${data.side_bar_config.html}</div>`
            );
            // 添加标题栏容器
            $(`#${data.container}`).append(
                `<div class="_dcdev_preset_" id="_dc_title_bar_container_" style="z-index:99999999;width:100%;top:0px;position:absolute;"">${data.title_bar_config.html ? data.title_bar_config.html : ""}</div>`);

            // 设置侧边菜单栏容器弹出速度
            document.getElementById("_dc_side_bar_container_").style.transition = data.interval + "s linear";
            // 添加标题栏及侧边栏之后的回调
            if (cb) {
                cb({ title_container: document.getElementById("_dc_title_bar_container_"), side_bar_container: document.getElementById("_dc_side_bar_container_") })
            }
            // 呼出侧边菜单按钮的点击事件
            $(`#_dc_menu_button_`).click(function () {
                var that = window[`_dc_side_bar_object_`];
                var data = window[`_dc_side_bar_data_`];
                // 已展开状态
                if ($(`#_dc_menu_button_`).data("is_extented") == 1) {
                    console.log("准备缩回")
                    that.hide(data);
                }
                // 已关闭状态
                else {
                    console.log("准备展开")
                    that.show(data)
                }
            })
        },
        // 展开
        show: function (data) {
            var data = this._dc_side_bar_data_;
            if (data.side_bar_config.auto_hide_timeout) {
                data.auto_hide_timeout = setTimeout(() => {
                    clearTimeout(data.auto_hide_timeout);
                    data.auto_hide_timeout = null;
                    this.hide();
                }, data.side_bar_config.auto_hide_timeout * 1000);
            }
            $(`#_dc_menu_button_`).html(data.title_bar_config.on_config.html);
            // 展开回调
            $(`#_dc_menu_button_`).data("is_extented", 1)
            if (data.title_bar_config.on_config.cb) {
                data.title_bar_config.on_config.cb({ side_bar_container: $("#_dc_side_bar_container_").children()[0] });
            }
            var top = $($("#_dc_title_bar_container_").children()[0]).height();
            switch (data.direction) {
                case "left":
                    var width = $(`#${data.container}`).width() * data.extent_rate / 100;
                    var height = $(`#${data.container}`).height() - top;
                    $("#_dc_side_bar_container_").width(width).height(height).css("top", top);
                    $("#_dc_side_bar_container_").css("left", -$(`#_dc_side_bar_container_`).width() - 5);
                    $("#_dc_side_bar_container_").css("display", "block");
                    $("#_dc_side_bar_container_").animate({
                        left: 0
                    }, data.interval);
                    break;
                case "right":
                    var width = $(`#${data.container}`).width() * data.extent_rate / 100;
                    var height = $(`#${data.container}`).height() - top;
                    $("#_dc_side_bar_container_").width(width).height(height).css("top", top);
                    $("#_dc_side_bar_container_").css("right", -$(`#_dc_side_bar_container_`).width() - 5);
                    $("#_dc_side_bar_container_").css("display", "block");
                    $("#_dc_side_bar_container_").animate({
                        right: 0
                    }, data.interval);
                    break;
                case "top":
                    var width = $(`#${data.container}`).width();
                    var height = ($(`#${data.container}`).height() - top) * data.extent_rate / 100;
                    $("#_dc_side_bar_container_").width(width).height(height).css("top", top);
                    $("#_dc_side_bar_container_").css("top", -height);
                    $("#_dc_side_bar_container_").css("display", "block");
                    $("#_dc_side_bar_container_").animate({
                        top: top
                    }, data.interval);
                    break;
                case "bottom":
                    var width = $(`#${data.container}`).width();
                    var height = ($(`#${data.container}`).height() - top) * data.extent_rate / 100;
                    $("#_dc_side_bar_container_").width(width).height(height).css("bottom", height);
                    $("#_dc_side_bar_container_").css("bottom", -height);
                    $("#_dc_side_bar_container_").css("display", "block");
                    $("#_dc_side_bar_container_").animate({
                        bottom: 0
                    }, data.interval);
                    break;
            }
        },
        // 缩回
        hide: function (data) {
            var data = this._dc_side_bar_data_;
            clearTimeout(data.auto_hide_timeout);
            $(`#_dc_menu_button_`).html(data.title_bar_config.off_config.html);
            $(`#_dc_menu_button_`).data("is_extented", 0)
            // 缩回回调
            if (data.title_bar_config.off_config.cb) {
                data.title_bar_config.off_config.cb();
            }
            var height = $(`#${data.container}`).height() - top;
            switch (data.direction) {
                case "left":
                    $("#_dc_side_bar_container_").animate({
                        left: -$(`#_dc_side_bar_container_`).width() - 5
                    }, data.interval, function () {
                        setTimeout(() => {
                            $("#_dc_side_bar_container_").css("display", "none");
                        }, 100);
                    });
                    break;
                case "right":
                    $("#_dc_side_bar_container_").animate({
                        right: -$(`#_dc_side_bar_container_`).width() - 5
                    }, data.interval, function () {
                        setTimeout(() => {
                            $("#_dc_side_bar_container_").css("display", "none");
                        }, 100);
                    });
                    break;
                case "top":
                    $("#_dc_side_bar_container_").animate({
                        top: -$(`#_dc_side_bar_container_`).height() - 5
                    }, data.interval, function () {
                        setTimeout(() => {
                            $("#_dc_side_bar_container_").css("display", "none");
                        }, 100);
                    });
                    break;
                case "bottom":
                    $("#_dc_side_bar_container_").animate({
                        bottom: -$(`#_dc_side_bar_container_`).height() - 5
                    }, data.interval, function () {
                        setTimeout(() => {
                            $("#_dc_side_bar_container_").css("display", "none");
                        }, 100);
                    });
                    break;
            }
        }
    }
})(window);